package com.zan.pattern.singleton.demo3;

/**
 * @Author Zan
 * @Create 2024/4/23 11:18
 * @Description :
 *          懒汉式:
 * @ClassName: Singleton
 */
public class Singleton {

    // 私有构造方法
    private Singleton() {
    }

    // 声明Singleton类型的变量
    private static Singleton instance; // 只声明了变量，并没有赋值

    // 对外提供访问方式
    public static synchronized Singleton getInstance() {
        // 判断instance是否为null，如果为null，说明还没有创建对象，需要创建一个并返回，如果有，直接返回即可
        if (instance == null) {
            // 多线程导致单例失效 - 因此需要添加synchronized关键字
            // 线程1等待，线程2获取到cpu的执行权，也会进入到该判断里面
            instance = new Singleton();
        }
        return instance;
    }
}
